# 绘制图形
import turtle as t
import math


# 示例图1，绘制蟒蛇
def drawpy():
    t.setup(800, 400, 100, 100)
    # 后两个参数不写，默认窗口位于屏幕正中心
    t.setup(800, 600, )
    # 设置画布大小
    t.screensize(400, 300, "white")
    t.penup()
    t.fd(-250)
    t.pendown()
    t.pensize(25)
    t.pencolor("purple")
    # 设置海龟转向的绝对角度
    t.seth(-40)
    for i in range(4):
        t.circle(40, 80)
        t.circle(-40, 80)
    t.circle(40, 80 / 2)
    t.fd(40)
    t.circle(16, 180)
    t.fd(40 * 2 / 3)
    # t.down()
    t.exitonclick()


# 示例图2，绘制小猫
def drawcat():
    # t的空间坐标，绝对坐标
    t.setup(800, 400, 100, 100)
    t.pendown()
    t.pensize(5)
    t.goto(100, 100)
    t.goto(100, -100)
    t.goto(-100, -100)
    t.goto(-100, 100)
    t.goto(0, 0)
    t.goto(100, 100)
    t.exitonclick()
    t.resetscreen()


# 学习turtle中的其他动作，了解RGB色彩体系
def drawnothing():
    # 海龟正前方前进
    t.fd(100)
    # 海龟反方向前进
    t.bk(100)
    # 以海龟当前位置左侧某一个点为圆心，进行曲线前进  ,t.circle(r, angle)  r为半径，angle为角度
    r = 200
    angle = 45
    t.circle(r, angle)
    # 向左运动
    t.left(angle)
    t.fd(100)
    # 向右运动
    t.right(angle)
    t.fd(100)

    # t中的RGB色彩体系
    # 使用RGB颜色小数值
    t.colormode(1.0)

    # 使用RGB颜色整数值
    t.colormode(255)

    t.exitonclick()


# 绘制多边形
def drawpolygon():
    t.setup(800, 600, 640, 480)
    t.pensize(5)
    t.pencolor("black")
    t.penup()
    t.pendown()
    for i in range(10):
        t.fd(50)
        t.right(36)
        t.fd(50)
        t.left(72)
    t.fd(50)
    for i in range(10):
        t.fd(math.cos(math.radians(36)) * 100)
        t.left(36)
    t.exitonclick()


# 测试cos函数，必须加上math.radians()才是输入角度值
# print("cos36= ", math.cos(math.radians(60)))

# 绘制圆弧，深入了解turtle.circle()的用法
def drawwheel():
    t.setup(800, 600, 640, 480)
    t.pensize(5)
    t.pencolor("black")
    t.penup()
    t.pendown()
    for i in range(4):
        t.seth(0)
        t.left(45 * (2 * i + 1))
        t.fd(200)
        t.left(90)
        t.circle(200, 45)
        t.goto(0, 0)
    t.exitonclick()


# # 绘制多边形的快捷方法
# t.pensize(5)
# t.seth(22.5)
# t.circle(100, steps=8)
# t.exitonclick()

def moveto(x, y):
    t.penup()
    t.goto(x, y)
    t.pendown()


def hairstyle(a, b, c, d, e, f):
    t.seth(a)
    t.circle(b, c)
    t.right(d)
    t.circle(e, f)


def eyebrow(a, b, c, d, e, f):
    t.pencolor(a)
    t.pensize(b)
    t.circle(c, d)
    t.circle(e, f)


def curv(a, b, c, d, e):
    moveto(a, b)
    t.seth(c)
    t.circle(d,e)


# 绘制卡通图片
def drawrike():
    t.colormode(255)
    t.speed(0)
    # 头发
    t.fillcolor('#c2e3ff')
    t.begin_fill()
    moveto(1, -2)
    hairstyle(200, 200, 5, 120, 200, 6)
    hairstyle(180, 200, 6, 135, 200, 7)
    hairstyle(120, 200, 12, 115, 200, 7)
    hairstyle(135, 200, 16, 150, 200, 16)
    hairstyle(115, -200, 16, 135, 200, 16)
    hairstyle(60, -200, 16, 125, 200, 16)
    hairstyle(30, -200, 16, 115, -200, 16)
    hairstyle(-15, -200, 12, 115, 200, 11)
    hairstyle(-35, -200, 8, 115, -200, 7)
    hairstyle(-60, -200, 6, 115, -200, 6)
    hairstyle(-70, -200, 4, 115, -200, 3)
    t.end_fill()

    # 脸部
    moveto(0, 0)
    t.seth(-80)
    t.fillcolor("#e5dad4")
    t.begin_fill()
    t.circle(50, 150)
    t.circle(50, 10)
    t.circle(200, 30)
    t.circle(50, 150)
    t.circle(200, 30)
    t.end_fill()
    t.seth(-180)

    # 耳朵
    t.fillcolor('#e2ddda')
    moveto(-8, 30)
    t.left(10)
    t.begin_fill()
    t.circle(10, 185)
    t.end_fill()
    moveto(101, 22)
    t.right(18)
    t.begin_fill()
    t.circle(10, 180)
    t.end_fill()

    # 眉毛
    moveto(30, 106)
    t.seth(0)
    eyebrow('black', 2, 45, 25, -20, 20)
    moveto(20, 100)
    t.seth(0)
    eyebrow('black', 2, 100, 25, -20, 8)
    moveto(3, 86)
    t.seth(0)
    eyebrow('#c2e3ff', 8, 150, 25, -30, 30)

    # 眼睛
    t.pensize(1)
    t.pencolor("black")
    t.fillcolor("#ffffff")

    moveto(-2, 78)
    t.seth(240)
    t.begin_fill()
    t.circle(20, 270)

    moveto(-5, 67)
    t.seth(20)
    t.circle(-90, 27)
    t.end_fill()

    t.begin_fill()
    moveto(55, 84)
    t.seth(240)
    t.circle(20, 280)

    moveto(52, 74)
    t.seth(20)
    t.circle(-90, 27)
    t.end_fill()

    t.pensize(2.5)
    moveto(14, 67)
    t.circle(2)
    moveto(72, 74)
    t.circle(2)

    t.pensize(1)
    moveto(2, 44)
    t.seth(-30)
    t.circle(30, 70)
    moveto(59, 48)
    t.seth(-20)
    t.circle(30, 70)

    # 鼻子
    moveto(38, 53)
    t.seth(-90)
    t.circle(100, 15)
    t.circle(4, 190)
    t.right(30)
    t.circle(100, 15)

    # 嘴巴
    curv(18, 5, 20, -120, 30)
    curv(12, 10, -150, 8, 180)
    curv(84, 15, -30, -8, 180)

    # 酒渍
    t.fillcolor('#e5edd8')
    t.begin_fill()
    curv(35, 10, -130, 5, 110)
    t.circle(-20, 70)
    t.circle(4, 170)
    t.circle(90, 10)
    t.circle(-4, 100)
    t.circle(7, 140)
    t.end_fill()

    moveto(41, -6)
    t.circle(2)
    moveto(69, -15)
    t.begin_fill()
    t.circle(3)
    t.end_fill()

    # 衣服
    moveto(30, -40)
    t.seth(-90)
    t.fd(15)
    t.right(70)
    t.circle(200, 20)
    t.left(45)
    t.fd(200)

    moveto(70, -40)
    t.seth(-90)
    t.fd(15)
    t.left(70)
    t.circle(-200, 20)
    t.right(45)
    t.fd(200)

    moveto(0, -172)
    t.seth(-93)
    t.fd(90)

    moveto(103, -172)
    t.seth(-90)
    t.fd(90)

    moveto(28, -54)
    t.seth(-109)
    t.fd(120)
    t.left(80)
    t.fd(30)
    t.right(90)
    t.fd(40)
    t.left(60)
    t.fd(40)

    moveto(70, -54)
    t.seth(-70)
    t.fd(120)
    t.right(80)
    t.fd(30)
    t.left(90)
    t.fd(40)
    t.right(60)
    t.fd(40)

    t.fillcolor('#aeebf0')
    t.begin_fill()
    moveto(28, -54)
    t.seth(-92)
    t.fd(220)
    moveto(28, -54)
    t.seth(-27)
    t.circle(50, 50)
    moveto(70, -54)
    t.seth(-88)
    t.fd(220)
    t.end_fill()
    t.exitonclick()


# drawpy()
# drawcat()
# drawnothing()
# drawpolygon()
# drawwheel()
drawrike()
